package com.lhkj.ct.framework.listener.easyexcel;

import com.alibaba.excel.context.AnalysisContext;
import com.lhkj.ct.meta.admin.model.entity.TblEmployee;
import lombok.extern.slf4j.Slf4j;

import java.text.MessageFormat;

/**
 * 用户导入监听器
 * <p>
 * 最简单的读监听器：https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read
 *
 * @author haoxr
 * @since 2022/4/10 20:49
 */
@Slf4j
public class UserImportListener extends MyAnalysisEventListener<TblEmployee> {


    // 有效条数
    private int validCount;

    // 无效条数
    private int invalidCount;

    // 导入返回信息
    StringBuilder msg = new StringBuilder();

    // 部门ID
    private final Long deptId;

//    private final SysUserService userService;
//
//    private final PasswordEncoder passwordEncoder;
//
//    private final UserConverter userConverter;
//
//    private final SysRoleService roleService;
//
//    private final SysUserRoleService userRoleService;

    public UserImportListener(Long deptId) {
        this.deptId = deptId;
//        this.userService = SpringUtil.getBean(SysUserService.class);
//        this.passwordEncoder = SpringUtil.getBean(PasswordEncoder.class);
//        this.roleService = SpringUtil.getBean(SysRoleService.class);
//        this.userRoleService = SpringUtil.getBean(SysUserRoleService.class);
//        this.userConverter = SpringUtil.getBean(UserConverter.class);
    }

    @Override
    public void invoke(TblEmployee tblEmployee, AnalysisContext analysisContext) {

    }

    /**
     * 每一条数据解析都会来调用
     * <p>
     * 1. 数据校验；全字段校验
     * 2. 数据持久化；
     *
     * @param userImportVO    一行数据，类似于 {@link AnalysisContext#readRowHolder()}
     * @param analysisContext
     */
//    @Override
//    public void invoke(UserImportVO userImportVO, AnalysisContext analysisContext) {
//        log.info("解析到一条用户数据:{}", JSONUtil.toJsonStr(userImportVO));
//        // 校验数据
//        StringBuilder validationMsg = new StringBuilder();
//
//        String username = userImportVO.getUsername();
//        if (StrUtil.isBlank(username)) {
//            validationMsg.append("用户名为空；");
//        } else {
//            long count = userService.count(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUsername, username));
//            if (count > 0) {
//                validationMsg.append("用户名已存在；");
//            }
//        }
//
//        String nickname = userImportVO.getNickname();
//        if (StrUtil.isBlank(nickname)) {
//            validationMsg.append("用户昵称为空；");
//        }
//
//        String mobile = userImportVO.getMobile();
//        if (StrUtil.isBlank(mobile)) {
//            validationMsg.append("手机号码为空；");
//        } else {
//            if (!Validator.isMobile(mobile)) {
//                validationMsg.append("手机号码不正确；");
//            }
//        }
//
//        if (validationMsg.length() == 0) {
//            // 校验通过，持久化至数据库
//            SysUser entity = userConverter.importVo2Entity(userImportVO);
//            entity.setDeptId(deptId);   // 部门
//            entity.setPassword(passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD));   // 默认密码
//            // 性别翻译
//            String genderLabel = userImportVO.getGender();
//            if (StrUtil.isNotBlank(genderLabel)) {
//                Integer genderValue = (Integer) IBaseEnum.getValueByLabel(genderLabel, GenderEnum.class);
//                entity.setGender(genderValue);
//            }
//
//            // 角色解析
//            String roleCodes = userImportVO.getRoleCodes();
//            List<Long> roleIds = null;
//            if (StrUtil.isNotBlank(roleCodes)) {
//                roleIds = roleService.list(
//                                new LambdaQueryWrapper<SysRole>()
//                                        .in(SysRole::getCode, roleCodes.split(","))
//                                        .eq(SysRole::getStatus, StatusEnum.ENABLE.getValue())
//                                        .select(SysRole::getId)
//                        ).stream()
//                        .map(role -> role.getId())
//                        .collect(Collectors.toList());
//            }
//
//
//            boolean saveResult = userService.save(entity);
//            if (saveResult) {
//                validCount++;
//                // 保存用户角色关联
//                if (CollectionUtil.isNotEmpty(roleIds)) {
//                    List<SysUserRole> userRoles = roleIds.stream()
//                            .map(roleId -> new SysUserRole(entity.getId(), roleId))
//                            .collect(Collectors.toList());
//                    userRoleService.saveBatch(userRoles);
//                }
//            } else {
//                invalidCount++;
//                msg.append("第" + (validCount + invalidCount) + "行数据保存失败；<br/>");
//            }
//        } else {
//            invalidCount++;
//            msg.append("第" + (validCount + invalidCount) + "行数据校验失败：").append(validationMsg + "<br/>");
//        }
//    }


    /**
     * 所有数据解析完成会来调用
     *
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

    }


    @Override
    public String getMsg() {
        // 总结信息
        return MessageFormat.format("导入用户结束：成功{}条，失败{}条；<br/>{}", validCount, invalidCount, msg);
    }
}
